// 判断arr是否为一个数组，返回一个bool值
function isArray<T>(arr: T): boolean {
    return Array.isArray(arr);
}

// 深度克隆
function deepClone<T>(obj: T): T {
    // 对常见的“非”值，直接返回原来值
    if ([null, undefined, NaN, false].includes(obj as any)) return obj;
    if (typeof obj !== "object" || obj === null) {
        // 原始类型或 null 直接返回
        return obj;
    }

    // 处理数组和对象
    const clone: any = isArray(obj) ? [] : {};

    for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
            clone[key] = typeof obj[key] === "object" && obj[key] !== null ? deepClone(obj[key]) : obj[key];
        }
    }

    return clone as T;
}

export default deepClone;
